home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / et / et3_0-a1.lha / et3 / src / VObjectText.h.new < prev    next >
Text File  |  1992-08-19  |  3KB  |  126 lines

  1. #ifndef VObjectText_First
  2. #ifdef __GNUG__
  3. //pragma once
  4. #pragma interface
  5. #endif
  6. #define VObjectText_First
  7.  
  8. #include "StyledText.h"
  9. #include "Mark.h"
  10.  
  11. const cVObjectChar  = '#'; // chararcter to mark a VObject
  12.  
  13. enum VobMarkFlags {
  14.     eVobValid       = BIT(eMarkLast+1),
  15.     eVobMarkLast    = eMarkLast + 1
  16. };
  17.  
  18. //------ VisualMark -----------------------------------------------------------
  19.  
  20. class VisualMark: public Mark {
  21. public:
  22.     MetaDef(VisualMark);
  23.     
  24.     VisualMark(int p= 0, int l= 0, eMarkState s= eStateNone);
  25.     ~VisualMark();
  26.     
  27.     virtual int Width();
  28.     virtual void Draw(Point p, Rectangle clip, bool border)
  29. };
  30.  
  31. //------ VObjectMark -----------------------------------------------------------
  32.  
  33. class VObjectMark: public VisualMark {
  34.     class VObject *vop;
  35. public:
  36.     MetaDef(VObjectMark);
  37.     
  38.     VObjectMark(int p= 0, int l= 0, VObject *vo= 0, eMarkState s= eStateNone);
  39.     ~VObjectMark();
  40.  
  41.     virtual int Width();
  42.     virtual void Draw(Point p, Rectangle clip, bool border)
  43.  
  44.     VObject *GetVObject();
  45.     void SetVObject(VObject *vo);
  46.     void FreeAll();
  47.     OStream& PrintOn(OStream&);
  48.     IStream& ReadFrom(IStream&);
  49.     void CollectParts(Collection *col);
  50. };
  51.  
  52. //------ VObjectText -----------------------------------------------------------
  53.  
  54. class MarkList;
  55. class TextView;
  56.  
  57. class VObjectText: public StyledText {                                                           
  58.     MarkList *vobjects;
  59.     TextView *tv;
  60.  
  61.     void Init();
  62. protected:
  63.     void ReplaceRange(int from, int to, Text *src, int sfrom, int sto);    
  64. public:
  65.     MetaDef(VObjectText);
  66.     
  67.     VObjectText();
  68.     VObjectText(int size, Font *fd= gSysFont, TxtParaAlign= eTxtParaLeft);
  69.     VObjectText(byte *buf, int len= -1, Font *fd= gSysFont, TxtParaAlign= eTxtParaLeft);
  70.     ~VObjectText();
  71.     void InitNew();
  72.  
  73.     //---editing
  74.     void SetCharStyle(TxtCharProp m, int f, int t, const CharStyleSpec &st);
  75.     void ReplaceCharStyles(RunArray *styles, int from, int to);
  76.  
  77.     //---- VObject embedding
  78.     VObject *GetVObjectAt(int at);
  79.     byte GetEscapeChar();
  80.     void PasteVObject(VObject *vop, int from, int to);
  81.     VObject *ContainsPoint(Point p);
  82.     VObject *MarkAt(int charNo);
  83.     MarkList *GetVObjectMarks();
  84.     VObjectMark *GetMarkAt(int charNo);
  85.     int FindPositionOfVObject(VObject *);   // -1 VObject not found
  86.     TextView *GetTextView();
  87.     void SetView(class TextView*);
  88.  
  89.     bool IsVObjectChar(int charNo);   
  90.     bool IsVObject(int charNo);
  91.     bool IsEscape (int at);
  92.     
  93.     void VObjectChangedSize(VObject *);
  94.     Iterator *VObjectIterator();
  95.     int VObjectCount();
  96.     
  97.     //---- activation/passivation
  98.     OStream& PrintOn(OStream&);
  99.     IStream& ReadFrom(IStream&);
  100.     
  101.     void CollectParts(Collection *c);
  102.     void ClassInvariant();
  103. };
  104.  
  105. inline bool VObjectText::IsVObjectChar(int charNo)
  106.     return (*this)[charNo] == cVObjectChar; 
  107. }
  108.  
  109. inline bool VObjectText::IsVObject(int charNo)
  110.     return (IsVObjectChar(charNo) && MarkAt(charNo)); 
  111. }
  112.  
  113. inline VObject* VObjectMark::GetVObject()
  114.     return vop; 
  115. }
  116.     
  117. inline void VObjectMark::SetVObject(VObject *vo)
  118.     vop= vo; 
  119. }
  120.  
  121. #endif
  122.